*******************************************************************************
●ドキュメント種別      ：3rdSTEP(1994-12-27)
●対象ライブラリ記号名称：PER
●対象ライブラリ名称    ：システム／ペリフェラル
●バージョン　　        ：1.04
●作成者                ：N.T
●作成日                ：1994-12-27
●その他のメッセージ    ：なし
*******************************************************************************

///////////////////////////////////////////////////////////////////////////////
◆変更詳細　Ｖｅｒ１．０３−＞Ｖｅｒ１．０４
///////////////////////////////////////////////////////////////////////////////
■不良対策
    Ver1.03の不良の対策を以下のように行いました。
    
        ●1.manper.docの記述謝り
            174行目のPER_LInitのワーク涼気の計算方法を誤って記述していました。
            以下に正誤を示します。
            
                (誤) n = (num × size × 2) + size
                
                (正) n = (num × (size ＋ 2) × 2) + size
                
            又、sizeは各ペリフェラルによって異なります。以下の通りです。sizeは
            SMPCハードマニュアルにデータサイズとして記述してあります。以下に抜
            粋します。
            
                ペリフェラル                size
               ---------------------------------- 
                デジタルデバイス            2
                アナログデバイス            5
                ポインティングデバイス      3
                キーボードデバイス          4
                メガドライブ3ボタンパッド   1
                メガドライブ6ボタンパッド   2
               ----------------------------------
            
        ●2.マウスのペリフェラルID出力値の誤り
            マウスのペリフェラルIDを誤って、「E0」で出力していました。正しく
            「20」(PER_ID_PNT)を出力するよう修正しました。

■その他
        ●Ver1.03によるペリフェラルデータ出力仕様変更の補足説明
            以下の接続状態時のVer1.02以前とVer1.03以降のペリフェラル出力データ
            の違いを示します。
            
                ・接続状態
                    本体端子1=未接続
                    本体端子2=デジタルデバイス

                ・出力結果
                   ・Ver1.02以前
                        配列 0 = 未接続
                        配列 1 = デジタルデバイス

                   ・Ver1.03以降
                        配列 0 = デジタルデバイス
                        配列 1 = 不定
                        
                        ﾏﾙﾁﾀｯﾌﾟ情報
                            本体端子1ｺﾈｸﾀ数 = 0
                            本体端子2ｺﾈｸﾀ数 = 0

            上記のように、Ver1.02以前とVer1.03以降ではペリフェラル出力データが
            異なります。
            Ver1.03以降では、「ﾏﾙﾁﾀｯﾌﾟ情報」をもとにペリフェラル出力データを参
            照してください。
            (ﾏﾙﾁﾀｯﾌﾟ情報追加出力の理由は、ﾍﾟﾘﾌｪﾗﾙ作成基準を守るためです。)

///////////////////////////////////////////////////////////////////////////////
◆マニュアル追加情報
///////////////////////////////////////////////////////////////////////////////

■変更・追加概略
    前バージョンからの変更・追加は以下の２点についてです。１点目は主な変更点を
    説明します。その後に以下の２点の詳細な変更・追加を変更マニュアルとして記し
    ます。

    ●ゲーム作成基準（ペリフェラル）への対応による変更
    ●マニュアル追加情報
        トラブルシューティング等

■ゲーム作成基準（ペリフェラル）への対応による変更

    ゲーム作成基準へ対応できるようにペリフェラルの取得の仕様を一部変更しました
    。主な変更点は以下のとおりです。各ゲームに使用方法の自由度をあげるため前バ
    ージョンより少し低水準化しています。関数の数は前バージョンと同じです。
    関数名称は前バージョンと見分けがつくよう変更してあります。
    
    **☆重要☆**************************************************************
    *   Ver1.02以前のライブラリはゲーム作成基準に合わすことができないので、*
    *   必ず本バージョン(Ver1.03)のライブラリへ移行してください。          *
    ************************************************************************
    
    ●(1)マルチタップ情報の出力追加
        ペリフェラルデータの接続端子の情報が必要なため。
    
    ●(2)ペリフェラルサイズの出力追加
        ペリフェラルの種別判定に必要なため。
    
    ●(3)PUSH(前回未押下現在押下)データの出力の削除。
        メモリ効率を最適化できるようにライブラリから削除した。
    
    ●(4)ペリフェラルデータを加工しないで出力するよう修正。
        1つのゲーム内で異なるペリフェラルを使用できるようにするため。
        ( 例 -> 1P = アナログ、2P = マウス のゲーム　）

■変更マニュアル

    ●注意

        ◆(1)Ver1.01(1994-08-22)のサンプルでSCUの割り込みステータスレジスタを
            使用していました。しかし、このレジスタはハードウェアの制限により使
            用できなくなりました。
        
        ◆(2)２フレーム以上のゲームでの注意点
            ２フレーム以上（PER_LInit関数で設定するV-BLANKスキップ数で１以上を
            設定する）場合、本ライブラリでは最後のフレームのみペリフェラルの取
            得を行います。この仕様では途中のフレームのペリフェラルデータを取得
            しないためエッジ（前回未押下現在押下ボタン）の検出ができない場合が
            あります。シビアなエッジのチェックが必要な場合は、V-BLANKスキップ
            数を0にして、毎インタラプトでPER_LGetPer関数を実行してください。

        ◆(3)マニュアルで「PER_LGetPer関数はV-BLANK OUT直後に実行してください
            」と記述していましたが、VDP2ライブラリのSCL_VblankEnd関数を使用す
            る場合は、PER_LGetPer関数をSCL_VblankEnd関数よりも後に実行してくだ
            さい。SCL_VblankEnd関数の実行タイミングが遅いとスプライトのフレー
            ムチェンジが次のタイミングになってしまい画面の動きが遅くなってしま
            います。


    ●コーリングシーケンス

        サンプルプログラムをご覧ください。（サンプルプログラムは関数の使い方を
        知っていただくのが目的です。そのためゲーム作成基準に合っていない部分が
        あります。）
    

    ●データ仕様
        
        ◆ペリフェラルデータ出力
            ペリフェラルデータ出力構造を以下のように変更しました。
        
               +-ﾍﾟﾘﾌｪﾗﾙID
               |    +-ﾍﾟﾘﾌｪﾗﾙｻｲｽﾞ
               |    |    +-ﾃﾞｰﾀ 1                     1 ﾊﾞｲﾄ
               |    |    |    +-ﾃﾞｰﾀ 2                 <-->
               |    |    |    |                       |    |
             +----+----+----+----+--  -+----+----+----+----+----+----+--
             | ID | SZ | D1 | D2 |・・ | ID | SZ | D1 | D2 | ID | SZ | D
             +----+----+----+----+--  -+----+----+----+----+----+----+--
             <------------------>
                1 ﾍﾟﾘﾌｪﾗﾙﾃﾞｰﾀ
             <--------------------------------------------> <--------------
                                本体端子1の                     本体端子2の
                                ｺﾈｸﾀ数分の                      ｺﾈｸﾀ数分
                                ﾍﾟﾘﾌｪﾗﾙﾃﾞｰﾀ                     ﾍﾟﾘﾌｪﾗﾙﾃﾞｰﾀ
 
            上記の本体端子のｺﾈｸﾀ数は以下のマルチタップ情報に含まれます。
            
                ・ﾍﾟﾘﾌｪﾗﾙID
                    PER_ID_NCON_UNKNOWN /* 未接続 or SMPC UNKNOWN    */
                    PER_ID_DGT          /* デジタルデバイス          */
                    PER_ID_ANL          /* アナログデバイス          */
                    PER_ID_PNT          /* ポインティングデバイス    */
                    PER_ID_KBD          /* キーボード　　　          */
                    PER_ID_MD           /* メガドライブ              */

                ・ﾍﾟﾘﾌｪﾗﾙｻｲｽﾞ
                    PER_SIZE_NCON_15    /* 未接続 or 15バイトデバイス*/
                    PER_SIZE_DGT        /* デジタルデバイス          */
                    PER_SIZE_ANL        /* アナログデバイス          */
                    PER_SIZE_PNT        /* ポインティングデバイス    */
                    PER_SIZE_KBD        /* キーボード　　　          */
                    PER_SIZE_M3BP       /* メガドライブ3ボタンパッド */
                    PER_SIZE_M6BP       /* メガドライブ6ボタンパッド */
            
            ※PerXxxInfo, PerXxxDataﾃﾞｰﾀ型は削除しました。
            
            ※但し、PerXxxDataのビット位置定数は名称を変更して残してあります。
              ビット位置はバイト単位でアクセスしたときのものです。詳細は
              sega_per.hをご覧ください。
                
                (例) PER_DGT_U --> PER_LDGT_U
            
            ※マウスデータのデジタルデータ作成機能は削除しました。
                Ver1.02では以下のようにしてマウスのデジタルデータを作成してい
                ました。参考にしてください。

                    (1)毎回の取得で以下のことを行う。
                        ・Yデータがマイナスであるとき
                            DOWN加算変数へY移動絶対値を加算
                        ・Yデータがプラスであるとき
                            UP加算変数へY移動絶対値を加算
                        ・Xデータがマイナスであるとき
                            LEFT加算変数へX移動絶対値を加算
                        ・Xデータがマイナスであるとき
                            RIGHT加算変数へX移動絶対値を加算
                           
                        それぞれ加算変数が256以上になったときビットを押下状態
                        にする。押下状態にした加算変数は0クリアする。
                        

        ◆マルチタップ情報
            
            typedef struct {
                PerMulId    id;     /* ﾏﾙﾁﾀｯﾌﾟID     */
                PerMulCon   con;    /* ｺﾈｸﾀ数        */
            }PerMulInfo;            /* ﾏﾙﾁﾀｯﾌﾟ情報   */

            ・ﾏﾙﾁﾀｯﾌﾟID
                PER_MID_NCON_ONE        /* 未接続 or 直接            */

            ・ﾏﾙﾁﾀｯﾌﾟｺﾈｸﾀ数
                PER_MCON_NCON_UNKNOWN   /* 未接続 or UNKNOW          */


        ◆ペリフェラルデータ出力とマルチタップ情報
            以下の接続状態時のVer1.02以前とVer1.03以降のペリフェラル出力データ
            の違いを示します。
            
                ・接続状態
                    本体端子1=未接続
                    本体端子2=デジタルデバイス

                ・出力結果
                   ・Ver1.02以前
                        配列 0 = 未接続
                        配列 1 = デジタルデバイス

                   ・Ver1.03以降
                        配列 0 = デジタルデバイス
                        配列 1 = 不定
                        
                        ﾏﾙﾁﾀｯﾌﾟ情報
                            本体端子1ｺﾈｸﾀ数 = 0
                            本体端子2ｺﾈｸﾀ数 = 0

            上記のように、Ver1.02以前とVer1.03以降ではペリフェラル出力データが
            異なります。
            Ver1.03以降では、「ﾏﾙﾁﾀｯﾌﾟ情報」をもとにペリフェラル出力データを参
            照してください。
            (ﾏﾙﾁﾀｯﾌﾟ情報追加出力の理由は、ﾍﾟﾘﾌｪﾗﾙ作成基準を守るためです。)

    ●関数仕様
    
        ◆PER_Init関数 -> PER_LInit関数

            書式    Uint32 PER_LInit(PerKind kind, PerNum num, PerSize, 
                                     Uint8 work[n], Uint8 v_blank);
            入力    kind：  イントバック種別
                    num：   必要ペリフェラル数
                    size：  ペリフェラルサイズ
                    work：  ワーク領域
                            （必ずグローバル変数で宣言してください）
                    v_blank：   V-BLANKスキップ数
                    
                    ワーク領域の計算方法
                    
                        n = (num × (size ＋ 2) × 2) + size

                        sizeは各ペリフェラルによって異なります。以下の通りです
                        。sizeはSMPCハードマニュアルにデータサイズとして記述し
                        てあります。以下に抜粋します。
            
                            ペリフェラル                size
                           ---------------------------------- 
                            デジタルデバイス            2
                            アナログデバイス            5
                            ポインティングデバイス      3
                            キーボードデバイス          4
                            メガドライブ3ボタンパッド   1
                            メガドライブ6ボタンパッド   2
                           ----------------------------------
            
        ◆PER_GetPer関数 -> PER_LGetPer関数
        
            書式    Uint32 PER_LGetPer(PerGetPer **output_dt,
                                       PerMulInfo **mul_info);
            入力    なし
            出力    output_dt：ペリフェラル出力アドレス(NULL=取得できなかった）
                    mul_info：マルチタップ情報出力アドレス
                                PerMulInfo mul_info[2]のアドレスを取得します。
                                mul_info[0]は本体端子１の情報、mul_info[1]は本
                                体端子２の情報です。

            詳細説明
                    ・ペリフェラルデータはマルチタップコネクタ数の範囲のみ値を
                        保証します。よってペリフェラルデータを参照するときは必
                        ずマルチタップコネクタ数から参照位置を決めてください。
                    ・さらに、未接続の時、ペリフェラルデータの初期化を行ってい
                        ませんので、必ずペリフェラルID,ペリフェラルサイズを参
                        照してからペリフェラルデータを参照してください。


    ●トラブルシューティング
        
        ◆(1)ペリフェラルデータ取得できない。
            ・V-BLANK OUTから次のV-BLANK INまでの間に．．
                ・SHの割り込みマスクが15になっていないか？
                    割り込みマスクが15になっているとSMPC割り込み（その他の割り
                    込みも）を受け付けることができません。0かSMPCの割り込み優
                    先度より低い割り込みマスクを設定してください。

                ・SCUの割り込みマスクのSMPC割り込みビット位置が1（禁止）になっ
                  ていないか？
                    割り込み禁止になっているとSMPC割り込みを受け付けることがで
                    きません。0（許可）にしてください。
                    
                ・SMPC割り込み優先度より高い割り込みが長い時間実行されている。
                    優先順位の高い割り込み処理中は優先度の低い割り込みを受け付
                    けることができません。優先度の高い割り込み処理を長く実行し
                    なくするか、システムライブラリの割り込み優先順位変更ルーチ
                    ンを使用しSMPC割り込みが受け付けれるようにしてください。
                    
                    ※割り込み優先度はハード固有値とシステムライブラリの設定値
                    の２つがあります。詳しくはシステムライブラリとSCUハードウ
                    ェアマニュアルをご覧ください。

■その他
    ◆コンパイルオプションの変更
        ライブラリのコンパイルオプションの/SPを/NOSPへ変更しました。理由は、/SP
        でコンパイルすると関数がインライン展開されてしまうのでデバッグ時に混乱
        を招く恐れがあるためです。

    ◆システム／ペリフェラルライブラリ使用サンプルプログラムへの対処
        システム／ペリフェラルライブラリを使用している各ライブラリの
        サンプルプログラムのために今回のシステム／ペリフェラルライブラリには、
        以前のバージョンの関数、定数等を含めています。但し、この関数、定数等は
        、4thSTEPでは削除します。
        以前のバージョンの関数、定数等は使用しないでください。
        ￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣

********************************** end of file ********************************
